/*
 * @Description: 
 * @Author: rendc
 * @Date: 2024-10-11 14:38:43
 * @LastEditors: rendc
 * @LastEditTime: 2024-10-11 15:10:32
 */

/**
 * Producer
 */
public class Producer extends Thread {
  // 成员属性
  private BaoZi baoZi;
  private String name;

  // 构造器
  public Producer() {
  }

  // 全参构造器
  public Producer(BaoZi baoZi, String name) {
    this.baoZi = baoZi;
    this.name = name;
  }

  // 重写run方法
  @Override
  public void run() {
    for (int i = 1; i <= 100; i++) {
      // 生产包子
      synchronized (baoZi) {
        // 需要同步的代码 - 开始
        // 判断包子是否存在
        if (baoZi.flag) {
          try {
            // 线程等待 此处的代码可能触发异常
            baoZi.wait();
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
        // 生产包子
        System.out.println(this.name + "第" + i + "次，生产包子。");
        baoZi.num++;
        System.out.println("生产完成，生产包子数量：" + baoZi.num);
        // 此时有包子，flag改为true
        baoZi.flag = true;
        // 通知消费者吃包子
        baoZi.notify();
        // 需要同步的代码 - 结束
      }
    }
  }
}